/*
  2019-5-16
  class的底层实现方式，使用es5的function实现
  class的prototype
  class动态添加方法
  class的私有属性，私有方法实现方式
*/

//类声明
const _sb=Symbol();
class F{
  //y="2222"; //目前版本的es6不支持此写法，需要用babel转译，实际含义等同于在constructor中声明
  constructor(){
    this.funcname='F';
    this[_sb]='私有属性';
  }
  getF(){
    return this.funcname;
  }
  ['getF2'](){}//等价于F.prototype['getF2']=function(){}

  get Nfuncname(){
    return this.funcname;
  }
  set Nfuncname(value){
    this.funcname=value;
  }
}
console.log(F===F.prototype.constructor);//true
F.prototype.getF1=function(){};//等价于再class F的内部定义getF1

//export {F};在其他文件中应用时，无法调用_sb，从而实现私有属性
let f=new F();



//以上类声明法等价于
function Foo(){
  this.funcname='Foo';
}
Foo.prototype.getFoo=function(){
  return this.funcname;
}

//类表达式
let F1=class{};
let F2=class _F2{}

